from django.shortcuts import render,reverse
from django.http import HttpResponse,JsonResponse
from .. import models


# 后台 - 分类管理


# 封装函数，获取完成排序且有层次关系的分类
def select_all_classify():
    # select *,concat(path,id) as paths from myadmin_BookType order by paths;
    # 将id和path两个字段拼起来形成一个新字段并排序，即子类别排在父级类别后面
    data = models.BookType.objects.extra(select={'paths':'concat(path,id)'}).order_by('paths')

    # 根据path中 ',' 的数量判断类别的等级，并在类别名前面显示对应数量的层级
    for i in data :
        num = i.path.count(',') - 1
        i.nbsp = '|---- ' * num
        # 为不是顶级分类的所有子类，添加pname属性记录它的父级ID
        if i.pid != 0 :
            i.pname = models.BookType.objects.get(id=i.pid).name

    return data


# 分类管理 - 列表
def classifyindex(request):
    context = {'data':select_all_classify()}
    return render(request,'myadmin/classify/index.html',context)


# 分类管理 - 添加
def classifyadd(request):
    if request.method == 'GET' :
        # 获取所有分类数据
        context = {'classify':select_all_classify()}
        # 加载添加表单
        return render(request,'myadmin/classify/add.html',context)

    else:
        # 接收表单数据
        data = request.POST.dict()
        data.pop('csrfmiddlewaretoken')

        # 判断当前添加分类的级别
        if data['pid'] == '0' :
            data['path'] = '0,'
        else:
            # 不是顶级分类时, path = 父级path + pid
            # 获取父级对象
            obj = models.BookType.objects.get(id=data['pid'])
            data['path'] = obj.path + data['pid'] + ','

    # 进行数据添加
    try:
        obj = models.BookType(**data)
        obj.save()
        url = reverse('myadmin_classifyindex')
        return HttpResponse(f'<script>alert("分类管理添加成功");location.href="{url}";</script>')
    except:

        return HttpResponse('<script>alert("分类管理添加失败");history.back();</script>')


# 分类管理 - 删除
def classifydelete(request):
    # 获取需要删除的分类id
    id = request.GET.get('id')

    # 判断该分类下是否有子类
    num = models.BookType.objects.filter(pid=id).count()
    if num :
        return JsonResponse({'error':1,'msg':'当前分类下还有子类，不能删除'})

    # 判断该分类下是否有商品

    # 删除分类
    try:
        obj = models.BookType.objects.get(id=id)
        obj.delete()
        return JsonResponse({'error':0,'msg':'分类删除成功'})
    except:
        return JsonResponse({'error':3,'msg':'分类删除失败'})


# 分类管理 - 修改
def classifyedit(request):
    try:
        # 接收ajax请求参数
        data = request.POST.dict()
        obj = models.BookType.objects.get(id=data['id'])
        obj.name = data['name']
        obj.save()
        return JsonResponse({'error':0,'msg':'更新成功'})
    except:
        return JsonResponse({'error':1,'msg':'更新失败'})






